package demo2;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/*
* DAO:Data Access Object
* 数据访问对象
*
* 模式使用当前类链接数据库,对User表进行操作
* 要连接数据库需要三个信息:
* 数据库的地址,用户名和密码
* 此时我们可以在当前类中用三个属性定义这三个信息,让Spring在创建对象同时对属性初始化
* */
@Component
/*
* @PropertySource注解,用于告知Spring容器需要加载一个配置文件
* 参数用于指定配置文件所在的位置
* 常用格式:
* classpath:文件名
*
* classpath(类路径),这里这样的写法"classpath:"指的是后面指定的文件在类路径中\
* 这里的类路径指的是JVM读取.class文件时的起始路径,也称为"类加载路径"
* 背景知识:
* 在Maven项目中,源代码放在:
* src/main
*       -/java                  这里存所有的.java原文件以及对应的包
*       -/resources             其他的资源文件
*
* 当maven项目编译后,上述两个路径中的内容会整合在一起统一放在:
* target/classes
* 这个目录就是JVM的类加载路径,这里开始顺着我们类定义的包可以找到对应的字节码文件
*
* 那么:
* 我们定义一个配置文件:config.properties,我们将其放在src/main/resources中,当maven项目
* 编译后该文件保存在target/classes中
* 因此在类加载路径的起始位置应当就能看到名为config.properties的文件
*
* Spring容器既可以找到配置文件,然后使用@Value注解初始化属性
* */
@PropertySource("classpath:config.properties")
public class UserDAO {
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.username}")
    private String password;

    @Override
    public String toString() {
        return "UserDAO{" +
                "url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
